package org.kgduyjj.toolkit.enumtype;

import org.kgduyjj.toolkit.util.StringUtils;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 身份证格式截断位和说明
 * 
 * @author Kgduyjj
 *
 */
@Getter
@AllArgsConstructor
public enum IDCardFormat {
    /** 数字本体码 */
    DIGITAL_ONTOLOGY(0, 17, "数字本体码"),
    /** 身份证自校验位 */
    SELF_CHECKCODE(17, 18, "自校验码"),

    /** 地区编码[完整] */
    AREACODE(0, 6, "地区编码"),
    /** 地区编码[省级] */
    AREACODE_PROVINCE(0, 2, "省份编码"),
    /** 地区编码[市级] */
    AREACODE_CITY(2, 4, "地市编码"),
    /** 地区编码[县市级] */
    AREACODE_COUNTY(4, 6, "区县编码"),

    /** 出生日期[完整] */
    BIRTHDAY(6, 14, "出生日期"),
    /** 出生日期[年] */
    BIRTHDAY_YEAR(6, 10, "出生年"),
    /** 出生日期[月] */
    BIRTHDAY_MONTH(10, 12, "出生月"),
    /** 出生日期[天] */
    BIRTHDAY_DAY(12, 14, "出生日"),
    /** 同区域同日期顺序号 */
    SEQUENCE_CODE(14, 17, "顺序号"),
    /** 性别 */
    ALIAS_SEX(16, 17, "性别"),

    // END
    ;

    /** 开始坐标 */
    protected int sidx;
    /** 结束坐标 */
    protected int eidx;
    /** 格式描述 */
    protected String description;

    /**
     * 根据格式截断对身份证号码进行阶段
     * 
     * @param idCardNo
     * @return
     */
    public String truncation(String idCardNo) {
        if (StringUtils.isBlank(idCardNo)) {
            return "Unknown IdCardNo";
        }
        return idCardNo.substring(this.getSidx(), this.getEidx());
    }
}
